iT邦幫忙

第 12 屆 iThome 鐵人賽

DAY 13
0
自我挑戰組

前端我來了 - 30天 JavaScript 從無到有 系列 第 13

番外篇-透過 ElasticSearch實作全文檢索 -4

  • 分享至 

  • xImage
  •  

今天是小番外篇的結尾拉~
來談談一路上踩的雷 + 解析 Google 進階搜索進行吧

首先先談到 Elastic 的特性:

將原詞修改後存入資料庫,拆解儲存
不受影響 : 小寫字母、數字
受影響 : 中文字、大寫字母、符號

原詞 : "JavaScript Course one"
資料庫 : "javascript", "course", "one"

原詞 : "鐵人賽"
資料庫 : "鐵", "人", "賽"

若不進行設定 -> 容易搜索出無關緊要的資料
例如 Query : 鋼鐵人 -> "鋼", "鐵", "人" -> 得到 "鐵人賽"

實測案例 (寫入資料 "JavaScript Course"、"鐵人賽")
測試 1 中文 (query = 鐵人)
matchQuery : 有符合即可 (轉碼搜尋,可拆解) -> 查到

包含 鐵人
包含 鐵
包含 人

matchPhraseQuery : 順序須符合 (轉碼搜尋,不可拆解) -> 查到

包含 鐵人

termQuery 完整包含 (不轉碼搜尋,不可拆解,長度不可大於 1 ) -> 查不到

query 改為鐵 -> 查到
query 改為人 -> 查到

測試 2 英文 (query = "JavaScript Course")
matchQuery : 有符合即可 (轉碼搜尋,可拆解) -> 查到

須為 JavaScript or Course, 但大小寫不拘

matchPhraseQuery 順序須符合 (轉碼搜尋,不可拆解) -> 查到

須為 JavaScript Course, 但大小寫不拘

termQuery 完整包含 (不轉碼搜尋,不可拆解,長度不可大於 1 ) -> 查不到

query  = JavaScript  查不到
query  = Course 查不到
query  = javascript 查的到
query  = course 查的到
query  = javascript course 查不到

以上實測完,其實很難做取捨,必須依照自己需求以及可接受的彈性進行設計
最無法理解的是 termQuery 用法!

一個小解法 設定欄位為 not_analyzed :
讓資料庫強制儲存一筆相同但未轉型資料,例如以下(DB 實際資料情況)

full_text : [javascript, course] -> 用來做模糊、一般搜索
extra_value : [JavaScript Course] -> 用來做強制搜索

好處 : 可以做強制搜索,當初就是為了強制搜索測了很久,踩了很多雷
壞處 : 可能造成資料多餘,必須將資料先進行架構性的規劃 (ex : 哪些欄位需要多儲存一個 not_analyzed 欄位)


最後談談 Google 搜尋引擎 做個收尾吧
Google 搜尋引擎真的做得很強,當然我只是做個簡單的小分析,如果真的要去深談它的內容,那就是另外一回事了。
首先 Google 搜尋引擎 基本上包含以下四大條件:

  • 查詢字詞
  • 網頁的關聯性和實用性
  • 資訊來源的專業度
  • 所在位置和設定

Google 一般搜尋 : matchQuery + fuzzy search

  • 會拆解
  • 符合度
    完整符合優先
    會呈現很多關聯度低 -> 可以打錯字

https://ithelp.ithome.com.tw/upload/images/20200913/20129536owyd0EsyFW.png
搜尋結果
https://ithelp.ithome.com.tw/upload/images/20200913/20129536RHZOGfTcsa.png

搜尋 哈士七
https://ithelp.ithome.com.tw/upload/images/20200913/20129536BN8a9T5Ynt.png

Google 進階搜尋
termQuery  + BoolQueryBuilder 

  • 順序不可顛倒
  • 組合條件
    https://ithelp.ithome.com.tw/upload/images/20200913/20129536CdiuSlyyZg.png

https://ithelp.ithome.com.tw/upload/images/20200913/20129536VA1visByyu.png


番外篇-透過 ElasticSearch實作全文檢索 完結 !
明天要繼續 JavaScript 從無到有


上一篇
番外篇-透過 ElasticSearch實作全文檢索 -3
下一篇
[30天 JavaScript 從無到有 Day 14] JavaScript 歷史
系列文
前端我來了 - 30天 JavaScript 從無到有 30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言